/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sys.dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import sys.bean.CaixaBean;
import sys.bean.ClienteBean;
import sys.bean.EntregaFuturaBean;
import sys.bean.PedidoBean;
import sys.bean.ProdutoBean;
import sys.bean.UsuarioBean;
import sys.utils.ConexaoADS;
import sys.utils.ConexaoMySql;
import sys.utils.Utils;

/**
 *
 * @author Administrador
 */
public class EntregaFuturaDao {
    
        public static EntregaFuturaBean dadosObservacao(String nPedido) throws SQLException, IOException {
        Connection con = ConexaoADS.getConection();

          String sql = "SELECT C191CODPRO, C01DESC, C191MOTIVO FROM SPAC191 \n"
                + "INNER JOIN SPAC01 ON (C01CODIGO = C191CODPRO) \n"
                + "WHERE C191NRPED = '" + nPedido + "' \n"
                + "AND C191MOTIVO <> ''";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        EntregaFuturaBean eFutura = new EntregaFuturaBean();

        while (rs.next()) {

            ProdutoBean produto = new ProdutoBean();
            produto.setDescricao(rs.getString("C01DESC"));
            
            eFutura.setProduto(produto);
            
            eFutura.setMotivo(rs.getString("C191MOTIVO"));

        }

        stmt.close();
        con.close();

        return eFutura;
    }

    /*
     retornando dados do endereço do pedido
     */
    public static EntregaFuturaBean dadosEndereco(String nPedido) throws SQLException, IOException {
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C05ENDER,C05ENDNR, C05BAIRRO, C05CIDADE, C13OBS \n"
                + "FROM SPAC13 \n"
                + "INNER JOIN SPAC05 ON (C05CODIGO = C13CLIE) \n"
                + "WHERE C13NPED = '" + nPedido + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        EntregaFuturaBean eFutura = new EntregaFuturaBean();

        while (rs.next()) {

            ClienteBean cliente = new ClienteBean();
            cliente.setEndereco(rs.getString("C05ENDER"));
            cliente.setnEndereco(rs.getString("C05ENDNR"));
            cliente.setBairro(rs.getString("C05BAIRRO"));
            cliente.setDescCidade(rs.getString("C05CIDADE"));

            PedidoBean pedido = new PedidoBean();
            pedido.setCliente(cliente);

            pedido.setObs(rs.getString("C13OBS"));

            eFutura.setPedido(pedido);

        }

        stmt.close();
        con.close();

        return eFutura;
    }

    /*
     verifica se pedido existe no mysql
     */
    public static boolean verificaSeExiste(String pedido) throws SQLException {

        boolean v = true;

        Connection con = ConexaoMySql.getConection();
        String sql = "select p.n_pedido, p.cod_cliente, p.nome_cliente, p.vendedor, DATE_FORMAT(p.data_envio_expedicao, '%d/%c/%Y-%k:%i:%S') as data \n"
                + "from pedido_entrega_futura p \n"
                + "WHERE p.n_pedido = '" + pedido + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            v = false;
        }

        stmt.close();
        con.close();

        return v;

    }

    /*
     retornando pedidos para entrega futura
     */
    public static List<EntregaFuturaBean> pedidosEntregaFuturaMysql(String dataInicial, String dataFinal) throws SQLException {
        List<EntregaFuturaBean> listaPedidos = new ArrayList<>();
        Connection con = ConexaoMySql.getConection();

        String sql = "select p.n_pedido, p.cod_cliente, p.nome_cliente, p.vendedor, DATE_FORMAT(p.data_envio_expedicao, '%d/%c-%k:%i:%S') as data, p.tipo  \n"
                + "from pedido_entrega_futura p \n"
                + "WHERE p.data_envio_expedicao BETWEEN '" + dataInicial + " 00:00:00' and '" + dataFinal + " 23:59:59' "
                + "order by p.tipo, p.n_pedido";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            EntregaFuturaBean iEntrega = new EntregaFuturaBean();
            PedidoBean pedido = new PedidoBean();
            pedido.setPedido(rs.getString("n_pedido"));
            pedido.setData(rs.getString("data"));

            ClienteBean cliente = new ClienteBean();
            cliente.setCodigo(rs.getString("cod_cliente"));
            cliente.setNome(rs.getString("nome_cliente"));
            // cliente.setCidade(rs.getString("C05CIDADE"));

            pedido.setCliente(cliente);

            UsuarioBean usuario = new UsuarioBean();
            usuario.setNome(rs.getString("vendedor"));
            pedido.setUsuario(usuario);

            CaixaBean caixa = new CaixaBean();
            //caixa.setHora(Utils.horaCorreta(rs.getString("TCHORA")));

            pedido.setCaixa(caixa);
            iEntrega.setTipo(rs.getString("tipo"));

            iEntrega.setPedido(pedido);

            listaPedidos.add(iEntrega);
        }

        stmt.close();
        con.close();

        return listaPedidos;
    }


    /*
     incluindo entregas no mysql
     */
    public static String incluir(List<EntregaFuturaBean> listaEFutura) throws SQLException {
        String pedidosErro = "";
        Connection con = ConexaoMySql.getConection();
        String sql = "INSERT INTO pedido_entrega_futura (n_pedido, cod_cliente, "
                + "nome_cliente, vendedor, tipo, data_envio_expedicao) VALUES (?, ?, ?, ?, ?, NOW());";

        PreparedStatement stmt = con.prepareStatement(sql);
        for (EntregaFuturaBean eFutura : listaEFutura) {

            try {
                stmt.setString(1, eFutura.getPedido().getPedido());
                stmt.setString(2, eFutura.getPedido().getCliente().getCodigo());
                stmt.setString(3, eFutura.getPedido().getCliente().getNome());
                stmt.setString(4, eFutura.getPedido().getUsuario().getNome());
                stmt.setString(5, eFutura.getTipo());

                stmt.execute();

            } catch (com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException e) {
                pedidosErro += eFutura.getPedido().getPedido() + "\n";
            }
        }

        stmt.close();
        con.close();

        return pedidosErro;

    }

    /*
     retornando pedidos para entrega futura
     */
    public static List<EntregaFuturaBean> pedidosEntregaFutura(String dataInicial, String dataFinal) throws SQLException, IOException {
        List<EntregaFuturaBean> listaPedidos = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C05CODIGO, C05NOME, C05CIDADE, C13NPED,C13DATA, C04NOME\n"
                + "FROM SPAC13 \n"
                + "INNER JOIN SPAC05 ON (C05CODIGO = C13CLIE) \n"
                + "INNER JOIN SPAC04 ON (C04CODIGO = C13VEND) \n"
                + "INNER JOIN SPAC93 ON (C13NPED = C93NPED) \n"
                + "WHERE C93QTDE > C93ENTREG \n"
                + "AND C13DATA BETWEEN '" + dataInicial + "' AND '" + dataFinal + "' \n"
                + "GROUP BY 1,2,3,4,5,6\n"
                + "ORDER BY 2";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            EntregaFuturaBean iEntrega = new EntregaFuturaBean();
            PedidoBean pedido = new PedidoBean();
            pedido.setPedido(rs.getString("C13NPED"));
            pedido.setData(Utils.dataCorreta(rs.getString("C13DATA")));

            ClienteBean cliente = new ClienteBean();
            cliente.setCodigo(rs.getString("C05CODIGO"));
            cliente.setNome(rs.getString("C05NOME"));
            cliente.setDescCidade(rs.getString("C05CIDADE"));

            pedido.setCliente(cliente);

            UsuarioBean usuario = new UsuarioBean();
            usuario.setNome(rs.getString("C04NOME"));
            pedido.setUsuario(usuario);

            iEntrega.setPedido(pedido);

            listaPedidos.add(iEntrega);
        }

        stmt.close();
        con.close();

        return listaPedidos;

    }

    /*
     retornando itens dos pedidos
     */
    public static List<EntregaFuturaBean> ItensPedido(String nPedido) throws SQLException, IOException {
        List<EntregaFuturaBean> listaItens = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C05CODIGO, C05NOME, C93NPED, C01DESC, C93QTDE, C93ENTREG \n"
                + "FROM SPAC93 \n"
                + "INNER JOIN SPAC05 ON (C05CODIGO = C93CLIE) \n"
                + "INNER JOIN SPAC01 ON (C01CODIGO = C93PROD) \n"
                + "WHERE C93NPED = '" + nPedido + "' ";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            EntregaFuturaBean iEntrega = new EntregaFuturaBean();

            PedidoBean pedido = new PedidoBean();

            ClienteBean cliente = new ClienteBean();
            cliente.setCodigo(rs.getString("C05CODIGO"));
            cliente.setNome(rs.getString("C05NOME"));

            pedido.setCliente(cliente);

            pedido.setPedido(rs.getString("C93NPED"));

            ProdutoBean produto = new ProdutoBean();
            produto.setDescricao(rs.getString("C01DESC"));

            pedido.setProduto(produto);

            iEntrega.setPedido(pedido);

            iEntrega.setQtde(rs.getDouble("C93QTDE"));
            iEntrega.setQtdeEntregue(rs.getDouble("C93ENTREG"));

            listaItens.add(iEntrega);
        }

        stmt.close();
        con.close();

        return listaItens;

    }

    /*
     verificando se pedido tem itens pendentes na entrega
     */
    public static boolean verificaItensPendentes(String nPedido) throws SQLException, IOException {
        boolean v = false;
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C93CLIE FROM SPAC93\n"
                + "WHERE C93NPED = '" + nPedido + "'\n"
                + "AND C93QTDE > C93ENTREG ";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
            v = true;
        }

        stmt.close();
        con.close();

        return v;

    }

}
